// Storage 工具类，处理不同环境的兼容性
class StorageUtil {
  constructor() {
    this.isH5 = typeof window !== 'undefined' && typeof document !== 'undefined'
    this.isUniApp = typeof uni !== 'undefined'
    
    console.log('Storage环境检测:', {
      isH5: this.isH5,
      isUniApp: this.isUniApp
    })
  }
  
  // 设置存储
  setItem(key, value) {
    try {
      if (this.isUniApp) {
        // UniApp 环境
        if (typeof value === 'object') {
          uni.setStorageSync(key, JSON.stringify(value))
        } else {
          uni.setStorageSync(key, value)
        }
        console.log(`UniApp存储成功: ${key} = ${value}`)
      } else if (this.isH5) {
        // H5 环境
        if (typeof value === 'object') {
          localStorage.setItem(key, JSON.stringify(value))
        } else {
          localStorage.setItem(key, value)
        }
        console.log(`H5存储成功: ${key} = ${value}`)
      } else {
        console.error('未知环境，无法存储数据')
        return false
      }
      return true
    } catch (e) {
      console.error(`存储失败 ${key}:`, e)
      return false
    }
  }
  
  // 获取存储
  getItem(key) {
    try {
      let value = null
      
      if (this.isUniApp) {
        // UniApp 环境
        value = uni.getStorageSync(key)
      } else if (this.isH5) {
        // H5 环境
        value = localStorage.getItem(key)
      } else {
        console.error('未知环境，无法读取数据')
        return null
      }
      
      if (value === null || value === undefined || value === '') {
        return null
      }
      
      // 尝试解析 JSON
      try {
        const parsed = JSON.parse(value)
        console.log(`读取成功: ${key} = ${JSON.stringify(parsed)}`)
        return parsed
      } catch (e) {
        // 不是 JSON，返回原始值
        console.log(`读取成功: ${key} = ${value}`)
        return value
      }
    } catch (e) {
      console.error(`读取失败 ${key}:`, e)
      return null
    }
  }
  
  // 删除存储
  removeItem(key) {
    try {
      if (this.isUniApp) {
        uni.removeStorageSync(key)
      } else if (this.isH5) {
        localStorage.removeItem(key)
      } else {
        console.error('未知环境，无法删除数据')
        return false
      }
      console.log(`删除成功: ${key}`)
      return true
    } catch (e) {
      console.error(`删除失败 ${key}:`, e)
      return false
    }
  }
  
  // 清空所有存储
  clear() {
    try {
      if (this.isUniApp) {
        uni.clearStorageSync()
      } else if (this.isH5) {
        localStorage.clear()
      } else {
        console.error('未知环境，无法清空数据')
        return false
      }
      console.log('清空存储成功')
      return true
    } catch (e) {
      console.error('清空存储失败:', e)
      return false
    }
  }
  
  // 获取所有键
  getAllKeys() {
    try {
      if (this.isUniApp) {
        return uni.getStorageInfoSync().keys
      } else if (this.isH5) {
        return Object.keys(localStorage)
      } else {
        return []
      }
    } catch (e) {
      console.error('获取所有键失败:', e)
      return []
    }
  }
  
  // 获取存储信息
  getInfo() {
    try {
      if (this.isUniApp) {
        return uni.getStorageInfoSync()
      } else if (this.isH5) {
        return {
          keys: Object.keys(localStorage),
          currentSize: JSON.stringify(localStorage).length,
          limitSize: 10 * 1024 * 1024 // 假设10MB限制
        }
      } else {
        return null
      }
    } catch (e) {
      console.error('获取存储信息失败:', e)
      return null
    }
  }
}

// 创建单例实例
const storageUtil = new StorageUtil()

export default storageUtil 